A portion of the disclosure of this patent document contains material which is subject to copyright protection. The copyright owner has no objection to the facsimile reproduction by anyone of the patent document or the patent disclosure, as it appears in the Patent and Trademark Office patent file or records, but otherwise reserves all copyright rights whatsoever.
This invention relates generally to uniformly navigating or browsing data from a variety of sources, and more particularly relates to methods and systems for referencing and retrieving data stored in a computer.
Previous techniques and mechanisms for navigating to and retrieving data in a computer system have had significant drawbacks which pose obstacles to providing unified tools for browsing data seamlessly and transparently from all sources (including local storage and remote networks).
Microsoft Corporation""s Object Linking and Embedding (OLE) component software technology provides a technique for referencing and retrieving data in a computer system which uses small objects referred to as monikers. An OLE object is a software component that may encapsulate both code (i.e., functions or procedures comprising a sequence of program instructions) and data, and exposes its functionality (i.e., the code) to other programs and objects (referred to as xe2x80x9cclientsxe2x80x9d) through interfaces. An interface is a named set of logically related functions. Each object is an instance of an object type (referred to as a xe2x80x9cclassxe2x80x9d) which defines the structure of interfaces that its objects support.
A moniker operates as a name for another object. It encapsulates the name of the object together with functions for retrieving the named object through a process referred to in OLE as xe2x80x9cbinding.xe2x80x9d The binding process resolves or dereferences a name of an object into a link or pointer to the particular named object (which for OLE purposes is a pointer to an interface of the named object including loading the object from persistent storage, if needed). Thus, binding can be defined as a process of retrieving and linking to an object referenced by a name.
The object named by a moniker can encapsulate any desired data. The name, for example, can be a file name of data stored as a file on a computer""s hard drive or on a shared network drive. The name can even be a uniform resource locator (URL) identifying a document or other data residing on the Internet. Further, the binding function in the moniker contains the code to perform all the steps necessary to bind to the data, including finding the code associated with the particular data referenced by the name, instantiating an object to encapsulate the data with its associated code, and loading the data from its storage source into the object. Thus, a client program can access any data from any source using a moniker that names that data, including a document stored as a file on a computer""s hard drive, a particular piece of a document (such as a particular cell of a spreadsheet), or even data from remote sources such as the Internet or on-line services.
OLE monikers have the advantage that the code for retrieving data resides outside the client program in the moniker. The logic necessary to access different data therefore need not be hard coded into the client program. Instead, the client need only include the code for interacting with monikers for the named objects. Further, each moniker exposes its binding function to clients through an interface. All monikers support a common interface structure defined by the monikers"" class. Since all monikers support the same interface, a client can interact with any moniker in the same way using the same code. OLE monikers thus provide a general mechanism for a client program to access any variety of data from any source.
OLE monikers, however, have a drawback when used for retrieving data from a slow source. The time to retrieve data from some sources (particularly from the Internet and other remote sources) is very slow relative to human response time. (The Internet is a global network of cooperatively interconnected computer networks, consisting of millions of individual computers. A portion of the Internet referred to as the xe2x80x9cworld-wide webxe2x80x9d consists of computers, also referred to as xe2x80x9csites,xe2x80x9d which make multi-media documents in hyper-text mark-up language (HTML) generally available for downloading or retrieval by individuals having a computer with Internet access.) A typical personal computer user connects to the Internet with a 28.8 kbaud or slower modem device. The typical document accessed from the world wide web portion of the Internet, on the other hand, is several tens of kbytes in size, and often incorporates one or more pictures which also may be tens of kbytes in size. At the data transfer rate of the typical modem connection, such typical data can take minutes to access from the Internet.
A drawback to using OLE monikers for retrieving data from such sources is that OLE monikers block. More specifically, when a client calls a moniker""s binding function, the call does not return until the data retrieval completes. During this time, execution of the client program (including its user interface) halts. In effect, the client""s user interface freezes and remains non-responsive to user input until the data access is complete. In the Microsoft Windows(copyright) operating system, this condition of the client program is indicated by changing the mouse cursor to an xe2x80x9chour glassxe2x80x9d icon when the client has the xe2x80x9cfocusxe2x80x9d (i.e., the cursor is positioned over the client""s window). Since the client is blocked, it is unable to display a progress indicator (such as a xe2x80x9c% completexe2x80x9d bar graph or xe2x80x9cestimated time remainingxe2x80x9d notification), or provide any control which the user can activate to cancel the data access. Since the client may remain non-responsive for a substantial time while accessing data with a moniker from a slow source, the user thus has no way of knowing whether the data is still being accessed or the client has xe2x80x9ccrashedxe2x80x9d (i.e., become inoperative) due to some error. As a result, OLE monikers provide a low quality of service when used for retrieving data from slow sources.
A unified browsing environment is provided in the present invention by an object-oriented framework and system having objects, programming interfaces, object integration interfaces, and methods for supporting unified retrieval of data from different sources. The invention overcomes the limitation in previous monikers of blocking execution of the moniker""s client, and thus provides source-transparent and responsive browsing.
According to one aspect of the invention, a computer programming platform includes monikers (referred to herein as xe2x80x9casynchronous monikersxe2x80x9d) which access data asynchronously. When a client calls the binding method of an asynchronous moniker, the asynchronous moniker returns control immediately to the client and completes the data access as a separately executing task or thread (sometimes referred to as xe2x80x9cbackground processingxe2x80x9d). Alternatively, the moniker retrieves data to storage with an asynchronous storage object which allows asynchronous access by the client to the data as it is retrieved to storage. Thus, even where the data is remotely accessed from a slow source, the client is able to maintain a responsive user interface, which prevents the perception of poor and non-uniform performance.
In the illustrated embodiment, the asynchronous moniker and the client provide interfaces through which they interact while the data access is performed. Through the client""s interface, the asynchronous moniker provides notifications of the status of the data access to the client. The client thus is able to display a progress indicator. Also, the client can call functions through the interface of the asynchronous moniker to abort, suspend, or resume the data access.
The illustrated embodiment of the invention provides an asynchronous moniker (referred to herein as a xe2x80x9cURL monikerxe2x80x9d) which references data with an Internet URL, and provides asynchronous access to the data for the client. The URL moniker has the capability of parsing the URL it contains, and utilizing an associated Internet transport protocol to access the data it names from the Internet. The programming platform includes an application programming interface which utilizes this parsing capability to provide an extensible service for creating a moniker which uses an appropriate transport protocol for a given data reference. The programming platform also provides object integration interfaces for the moniker""s client to negotiate acceptable media types with the data source.
Additional features and advantages of the invention will be made apparent from the following detailed description of an illustrated embodiment which proceeds with reference to the accompanying drawings.